﻿#ifndef IMAGEDISPLAY_H
#define IMAGEDISPLAY_H
#include <QMutex>
#include <QWidget>
#include <QSize>
class ImageDisplay : public QWidget
{
    Q_OBJECT
public:
    explicit ImageDisplay(QWidget *parent = 0);
    ~ImageDisplay();
    /**
    * @brief 将当前图像填充为单一颜色
    * @param cl 填充的颜色
    */	
    void fillImage(QRgb cl);
    /**
    * @brief 将当前图像填充为单一颜色
    * @param color 填充的颜色
    */	
    void fillImage(const QColor color);
    /**
    * @brief 将当前图像填充为单一颜色
    * @param color 填充的颜色
    */		
    void fillImage(Qt::GlobalColor color);
    /**
    * @brief 加载文件中的图像
    * @param fileName 带路径的完整文件名
    * @return true 表示加载成功，false 表示加载失败
    */	
    bool loadImage(const QString &fileName);
    bool saveImage(const QString &fileName);
    QSize sizeHint() const {return m_size;}
    void test();
    QImage getImage();
protected:
    void paintEvent(QPaintEvent *event);
    void drawImage(QPainter &painter);
    void drawCross(QPainter &painter);

public slots:
    void setSize(QSize size);
    void setRGB24Image(const unsigned char *imgBuf, QSize size);
    void setRGB32Image(const unsigned char *imgBuf, QSize size);
    void setMono8Image(const unsigned char *imgBuf, QSize size);
    void setImage(const QImage &image);
    void setZoomFactor(double factor);
    void setZoomFactorPCT(int factor);
    void showCross(bool show);
protected:
    bool m_showCross;
    double m_zoomFactor;
    QSize m_size;
	QImage m_image;
    int m_image_count;
	QMutex m_image_mutex; ///< m_image 会被多个线程访问，需用 mutex 保护
};

#endif // IMAGEDISPLAY_H
